package com.andf.common;

import java.lang.reflect.Method;

/**
 * 
* 项目名称：ANDF   
* 类名称：CloneObjcetBean   
* 类描述：对具有相同属性对象进行属性值的克隆   
* 创建人：lilubing   
* 创建时间：2013-5-10 14:06:18
* 修改人：lilubing   
* 修改时间：2013-5-10 14:06:25
* 修改备注：   
* @version    
*
 */
public class CloneObjcetBean {
	/**
	 * 
	 * @param sourceBean  源对象
	 * @param targetClazz 目标对象
	 * @return
	 * @throws Exception
	 * 方法说明 ：
	 * 创立日期 ：2011-Mar 18, 2011-2:46:50 PM
	 * 创建人   ：lilubing
	 * 修改记录 ：修改人  修改原因  修改时间
	 */
	public static Object clone(Object sourceBean, Class<?> targetClazz)
			throws Exception {
		Method[] itemMethods = sourceBean.getClass().getDeclaredMethods();
		Method[] icMethods = targetClazz.getDeclaredMethods();

		Object targetBean = targetClazz.newInstance();
		for (int i = 0; i < itemMethods.length; i++) {
			for (int j = 0; j < icMethods.length; j++) {
				if (itemMethods[i].getName().equals(icMethods[j].getName())
						&& itemMethods[i].getName().substring(0, 3).equals(
								"set")) {
					String methodDelareName = itemMethods[i].getName().replace(
							"set", "get");
					Object value = sourceBean.getClass().getDeclaredMethod(
							methodDelareName, new Class[] {}).invoke(
							sourceBean, new Object[] {});
					icMethods[j].invoke(targetBean, new Object[] { value });
				}
			}
		}
		return targetBean;
	}

}
